S3のバケットポリシー書き方まとめ |
您所在的位置:网站首页 › aws s3 policy › S3のバケットポリシー書き方まとめ |
最近AWSを勉強し始めたのですが、ポリシーを書くときに毎度迷子になるので バケットポリシーを中心としてリソースベースのポリシーの書き方をまとめておきます。 前提例えばS3を静的ホスティング先として設定する場合、 ・ブロックパブリックアクセスのブロック無効化 ・静的ウェブサイトホスティングの有効化 これらを行いますが、それだけだとエンドポイントにアクセスすることはできません。
何が足りないかというと、バケットポリシー の設定です。 S3のバケットポリシーはデフォルトでは全拒否となっています。 バケットポリシー全貌 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1621068192000", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:*", "Resource": "arn:aws:s3:::${ここにバケットの名前を入れる}" } ] }上記のように記述します。 各項目については、 こちらの公式リファレンスで確認ができます。 VersionこれはIAMポリシーの文法のバージョンです。 現在(2021/5/15)は 2012-10-17 です。 もう随分長いこと変わっていませんね。 Statement.Sidこれはポリシードキュメントに対して任意で与える識別子です。ステートメント毎に割り当てることができ、ポリシー内で重複してはいけません。 Statement.Effect許可の一覧であるAllow(ホワイトリスト)にするのか、禁止一覧であるDeny(ブラックリスト)にするのかを選べます。 Statement.Principalどの相手(Principal)に対して許可ないし拒否するかを指定します。 指定できる代表的なプリンシパルは下記にのようなものがあります。 AWSアカウント/ルートユーザー IAMユーザー IAMロール AWSサービス "Principal": { "AWS": "arn:aws:iam::AWSアカウントID:user/userネーム" } // 下記だと全てのユーザーに対して許可となる "Principal": { "AWS": "*" } Statement.Action許可ないし拒否するアクションを指定します。 // s3全てのアクション "Action": "s3:*" // sqsのsedMessageアクション "Action": "sqs:SendMessage" Statement. Resource一連のステートメントをどのリソースに反映するかを記述します。 // examplebucketという名前のs3に対してポリシーのステートメントが反映される。 "Resource": "arn:aws:s3:::examplebucket" // ワイルドカードも一部使用可能。下記はexamplebucketという名前のS3バケット内の全ての項目に対して反映される。 "Resource": "arn:aws:s3:::examplebucket/*" 応用的な記述Condition を使用して、ポリシーの実行するタイミングの条件を指定することができます。 これによって、 - IP制限 - ユーザー名による制限 - HTTP Refererの制限 - MFAの要求 など細かいコントロールをすることができます。 { "Version": "2012-10-17", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"} } } ] }上記は EffectがDeny(拒否)で NotIpAddressとしてIPアドレスが指定されているので、 54.240.143.0/24のIPアドレス以外は拒否する、という設定になります。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "Condition": { "StringEquals": { "aws:username": "myname" } } } ] }上記はAWSユーザー名が mynameの時のみ許可されます。 aws:usernameなどのポリシードキュメントで取得できるキーは、下記の公式ドキュメントに一覧があります。 タグやリージョン、日付など、色々なキーが取得できるようです。 AWS グローバル条件コンテキストキー ポリシージェネレーター公式側でポリシーのジェネレーターなるものも用意されており非常に便利です。
土台をジェネレーターでサクッと作成し、細かい部分は修正していくといった利用をしていこうと思います。 参考資料 AWS公式リファレンス S3バケットポリシーの具体例で学ぶAWSのPolicyドキュメント IAMについて今更学ぶ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |